package com.qf.springbootdemo03.util;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.Map;

/**
 * @author q
 * @version V1.0
 * @date 2021/11/27
 **/
public class JwtUtil {

    public static final String SIGNATURE = "myKey";

    /**
     * 生成Jwt
     * @param header 头部
     * @param claims 负载
     * @param day 保存天数
     * @return
     */
    public static String createJwt(Map<String,Object> header, Map<String,Object> claims, int day) throws Exception {
        if(null == header) {
            throw new RuntimeException("头数据不能为空");
        }
        if(null == claims) {
            throw new RuntimeException("负载数据不能为空");
        }
        Date start = new Date();
        Date end = new Date(start.getTime() + day*24*60*60*1000);
        return Jwts.builder()
                //头部
                .setHeader(header)
                //负载
                .setClaims(claims)
                //签名，指定算法和密钥
                .signWith(SignatureAlgorithm.HS256, SIGNATURE)
                //生效时间
                .setIssuedAt(start)
                //过期时间
                .setExpiration(end)
                .compact();
    }

    /**
     * 解析Jwt
     * @param token
     * @return
     */
    public static Map<String,Object> parseJwt(String token) throws Exception {
        //Signature错误： 会出MalformedJwtException
        //jwt过期:  会出ExpiredJwtException
        return Jwts.parser().setSigningKey(SIGNATURE).parseClaimsJws(token).getBody();
    }


}
